package br.com.fogas.database.entidade;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import br.com.fogas.database.IMetadata;

import com.j256.ormlite.dao.ForeignCollection;
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.ForeignCollectionField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName=IMetadata.INotaFiscal.table_name)
public class NotaFiscal implements IMetadata, Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@DatabaseField(generatedId = true, columnName=INotaFiscal.id)
	private Integer id;

	@DatabaseField(uniqueCombo=true, canBeNull=false, width=6, columnName=INotaFiscal.tx_nfnum)
	private String tx_nfnum;
	
	@DatabaseField(uniqueCombo=true, canBeNull=false, width=3, columnName=INotaFiscal.tx_serie)
	private String tx_serie;
	
	@DatabaseField(canBeNull=false, foreign=true, foreignAutoRefresh=true, columnName=INotaFiscal.tx_cod_cliente)
	private Cliente tx_cod_cliente;
	
	@DatabaseField(width=10, dataType = DataType.DATE_STRING, format = "dd/MM/yyyy", columnName=INotaFiscal.dt_nota)
	private Date dt_nota;

	@DatabaseField(width=10, dataType = DataType.DATE_STRING, format = "dd/MM/yyyy", columnName=INotaFiscal.dt_entrega)
	private Date dt_entrega;
	
	@DatabaseField(width=10, dataType = DataType.DATE_STRING, format = "dd/MM/yyyy", columnName=INotaFiscal.dt_vencimento)
	private Date dt_vencimento;
	
	@DatabaseField(width=19, dataType = DataType.DATE_STRING, format = "dd/MM/yyyy HH:mm:ss", columnName=INotaFiscal.dt_hora)
	private Date dt_hora;
	
	@DatabaseField(canBeNull=false, foreign=true, foreignAutoRefresh=true, columnName=INotaFiscal.tx_canal)
	private Canal tx_canal;
	
	@DatabaseField(canBeNull=false, foreign=true, foreignAutoRefresh=true, columnName=INotaFiscal.tx_cond_pagto)
	private CondicaoPagto tx_cond_pagto;
	
	@DatabaseField(width=5, columnName=INotaFiscal.tx_cfop)
	private String tx_cfop;
	
	@DatabaseField(width=18, columnName=INotaFiscal.tx_nosso_numero)
	private String tx_nosso_numero;
	
	@DatabaseField(dataType = DataType.BOOLEAN, columnName=INotaFiscal.cs_impressa)
	private boolean cs_impressa;
	
	@DatabaseField(dataType = DataType.BOOLEAN, columnName=INotaFiscal.cs_entregue)
	private boolean cs_entregue;
	
	@DatabaseField(dataType = DataType.BOOLEAN, columnName=INotaFiscal.cs_cancelada)
	private boolean cs_cancelada;
	
	@DatabaseField(dataType = DataType.BOOLEAN, columnName=INotaFiscal.cs_qrCode_lido)
	private boolean cs_qrCode_lido;
	
	@DatabaseField(columnName=INotaFiscal.nb_tp_nota)
	private Integer nb_tp_nota;
	
	@DatabaseField(columnName=INotaFiscal.tx_cod_boleto)
	private String tx_cod_boleto;
	
	@DatabaseField(dataType = DataType.BOOLEAN, columnName=INotaFiscal.cs_imp_msg_st)
	private boolean cs_imp_msg_st;
	
	@DatabaseField(columnName=INotaFiscal.nb_sync)
	private Integer nb_sync;
	
	@DatabaseField(dataType = DataType.BOOLEAN, columnName=INotaFiscal.cs_simulacao)
	private boolean cs_simulacao;
	
	@DatabaseField(dataType = DataType.BOOLEAN, columnName=INotaFiscal.cs_contigencia)
	private boolean cs_contigencia;
	
	@DatabaseField(width=44, columnName=INotaFiscal.tx_chave_acesso)
	private String tx_chave_acesso;
	
	@DatabaseField(width=50, columnName=INotaFiscal.tx_protocolo)
	private String tx_protocolo;
	
	@DatabaseField(width=8, columnName=INotaFiscal.tx_tempo_process)
	private String tx_tempo_process;
	
	@DatabaseField(dataType = DataType.BOOLEAN, columnName=INotaFiscal.cs_recusada)
	private boolean cs_recusada;
	
	@DatabaseField(columnName=INotaFiscal.tx_link_foto_servidor)
	private String tx_link_foto_servidor;
	
	@DatabaseField(columnName=INotaFiscal.tx_link_foto_local)
	private String tx_link_foto_local;
	
	@DatabaseField(width=396, columnName=INotaFiscal.tx_observacao)
	private String tx_observacao;
	
	@DatabaseField(dataType = DataType.BIG_DECIMAL_NUMERIC, columnName=INotaFiscal.vl_desconto_boleto)
	private BigDecimal vl_desconto_boleto;
	
	@DatabaseField(dataType = DataType.BIG_DECIMAL_NUMERIC, columnName=INotaFiscal.vl_base_icms)
	private BigDecimal vl_base_icms;
	
	@DatabaseField(dataType = DataType.BIG_DECIMAL_NUMERIC, columnName=INotaFiscal.vl_icms)
	private BigDecimal vl_icms;
	
	@DatabaseField(dataType = DataType.BIG_DECIMAL_NUMERIC, columnName=INotaFiscal.vl_valor_nota)
	private BigDecimal vl_valor_nota;
	
	@DatabaseField(dataType = DataType.BIG_DECIMAL_NUMERIC, columnName=INotaFiscal.vl_valor_total_produtos)
	private BigDecimal vl_valor_total_produtos;
	
	@DatabaseField(dataType = DataType.BIG_DECIMAL_NUMERIC, columnName=INotaFiscal.vl_peso_bruto)
	private BigDecimal vl_peso_bruto;
	
	@DatabaseField(dataType = DataType.BIG_DECIMAL_NUMERIC, columnName=INotaFiscal.vl_peso_liquido)
	private BigDecimal vl_peso_liquido;
	
	@DatabaseField(dataType = DataType.BIG_DECIMAL_NUMERIC, columnName=INotaFiscal.vl_quantidades)
	private BigDecimal vl_quantidades;
	
	@DatabaseField(dataType = DataType.BIG_DECIMAL_NUMERIC, columnName=INotaFiscal.vl_descontos)
	private BigDecimal vl_descontos;
	
	@DatabaseField(foreign=true, foreignAutoRefresh=true, columnName=INotaFiscal.tx_plano_visitas)
	private PlanoVisitas tx_plano_visitas;
	
	@DatabaseField(foreign=true, foreignAutoRefresh=true, columnName=INotaFiscal.tx_medidor)
	private Medidor tx_medidor;
	
	@ForeignCollectionField(eager = true)
	private ForeignCollection<NotaItem> notaItems;
	
	private List<NotaItem> notaItemsTemp;
	
	private NotaOcorrencia notaOcorrencia;
	
	public NotaFiscal() {
		
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getTx_nfnum() {
		return tx_nfnum;
	}

	public void setTx_nfnum(String tx_nfnum) {
		this.tx_nfnum = tx_nfnum;
	}

	public String getTx_serie() {
		return tx_serie;
	}

	public void setTx_serie(String tx_serie) {
		this.tx_serie = tx_serie;
	}

	public Cliente getTx_cod_cliente() {
		return tx_cod_cliente;
	}

	public void setTx_cod_cliente(Cliente tx_cod_cliente) {
		this.tx_cod_cliente = tx_cod_cliente;
	}

	public Date getDt_nota() {
		return dt_nota;
	}

	public void setDt_nota(Date dt_nota) {
		this.dt_nota = dt_nota;
	}

	public Date getDt_entrega() {
		return dt_entrega;
	}

	public void setDt_entrega(Date dt_entrega) {
		this.dt_entrega = dt_entrega;
	}

	public Date getDt_vencimento() {
		return dt_vencimento;
	}

	public void setDt_vencimento(Date dt_vencimento) {
		this.dt_vencimento = dt_vencimento;
	}

	public Date getDt_hora() {
		return dt_hora;
	}

	public void setDt_hora(Date dt_hora) {
		this.dt_hora = dt_hora;
	}

	public Canal getTx_canal() {
		return tx_canal;
	}

	public void setTx_canal(Canal tx_canal) {
		this.tx_canal = tx_canal;
	}

	public CondicaoPagto getTx_cond_pagto() {
		return tx_cond_pagto;
	}

	public void setTx_cond_pagto(CondicaoPagto tx_cond_pagto) {
		this.tx_cond_pagto = tx_cond_pagto;
	}

	public String getTx_cfop() {
		return tx_cfop;
	}

	public void setTx_cfop(String tx_cfop) {
		this.tx_cfop = tx_cfop;
	}

	public String getTx_nosso_numero() {
		return tx_nosso_numero;
	}

	public void setTx_nosso_numero(String tx_nosso_numero) {
		this.tx_nosso_numero = tx_nosso_numero;
	}

	public boolean isCs_impressa() {
		return cs_impressa;
	}

	public void setCs_impressa(boolean cs_impressa) {
		this.cs_impressa = cs_impressa;
	}

	public boolean isCs_entregue() {
		return cs_entregue;
	}

	public void setCs_entregue(boolean cs_entregue) {
		this.cs_entregue = cs_entregue;
	}

	public boolean isCs_cancelada() {
		return cs_cancelada;
	}

	public void setCs_cancelada(boolean cs_cancelada) {
		this.cs_cancelada = cs_cancelada;
	}

	public boolean isCs_qrCode_lido() {
		return cs_qrCode_lido;
	}

	public void setCs_qrCode_lido(boolean cs_qrCode_lido) {
		this.cs_qrCode_lido = cs_qrCode_lido;
	}

	public Integer getNb_tp_nota() {
		return nb_tp_nota;
	}

	public void setNb_tp_nota(Integer nb_tp_nota) {
		this.nb_tp_nota = nb_tp_nota;
	}

	public String getTx_cod_boleto() {
		return tx_cod_boleto;
	}

	public void setTx_cod_boleto(String tx_cod_boleto) {
		this.tx_cod_boleto = tx_cod_boleto;
	}

	public boolean isCs_imp_msg_st() {
		return cs_imp_msg_st;
	}

	public void setCs_imp_msg_st(boolean cs_imp_msg_st) {
		this.cs_imp_msg_st = cs_imp_msg_st;
	}

	public Integer getNb_sync() {
		return nb_sync;
	}

	public void setNb_sync(Integer nb_sync) {
		this.nb_sync = nb_sync;
	}

	public boolean isCs_simulacao() {
		return cs_simulacao;
	}

	public void setCs_simulacao(boolean cs_simulacao) {
		this.cs_simulacao = cs_simulacao;
	}

	public boolean isCs_contigencia() {
		return cs_contigencia;
	}

	public void setCs_contigencia(boolean cs_contigencia) {
		this.cs_contigencia = cs_contigencia;
	}

	public String getTx_chave_acesso() {
		return tx_chave_acesso;
	}

	public void setTx_chave_acesso(String tx_chave_acesso) {
		this.tx_chave_acesso = tx_chave_acesso;
	}

	public String getTx_protocolo() {
		return tx_protocolo;
	}

	public void setTx_protocolo(String tx_protocolo) {
		this.tx_protocolo = tx_protocolo;
	}

	public String getTx_tempo_process() {
		return tx_tempo_process;
	}

	public void setTx_tempo_process(String tx_tempo_process) {
		this.tx_tempo_process = tx_tempo_process;
	}

	public boolean isCs_recusada() {
		return cs_recusada;
	}

	public void setCs_recusada(boolean cs_recusada) {
		this.cs_recusada = cs_recusada;
	}

	public String getTx_link_foto_servidor() {
		return tx_link_foto_servidor;
	}

	public void setTx_link_foto_servidor(String tx_link_foto_servidor) {
		this.tx_link_foto_servidor = tx_link_foto_servidor;
	}

	public String getTx_link_foto_local() {
		return tx_link_foto_local;
	}

	public void setTx_link_foto_local(String tx_link_foto_local) {
		this.tx_link_foto_local = tx_link_foto_local;
	}

	public String getTx_observacao() {
		return tx_observacao;
	}

	public void setTx_observacao(String tx_observacao) {
		this.tx_observacao = tx_observacao;
	}

	public BigDecimal getVl_desconto_boleto() {
		return vl_desconto_boleto;
	}

	public void setVl_desconto_boleto(BigDecimal vl_desconto_boleto) {
		this.vl_desconto_boleto = vl_desconto_boleto;
	}

	public BigDecimal getVl_base_icms() {
		return vl_base_icms;
	}

	public void setVl_base_icms(BigDecimal vl_base_icms) {
		this.vl_base_icms = vl_base_icms;
	}

	public BigDecimal getVl_icms() {
		return vl_icms;
	}

	public void setVl_icms(BigDecimal vl_icms) {
		this.vl_icms = vl_icms;
	}

	public BigDecimal getVl_valor_nota() {
		return vl_valor_nota;
	}

	public void setVl_valor_nota(BigDecimal vl_valor_nota) {
		this.vl_valor_nota = vl_valor_nota;
	}

	public BigDecimal getVl_valor_total_produtos() {
		return vl_valor_total_produtos;
	}

	public void setVl_valor_total_produtos(BigDecimal vl_valor_total_produtos) {
		this.vl_valor_total_produtos = vl_valor_total_produtos;
	}

	public BigDecimal getVl_peso_bruto() {
		return vl_peso_bruto;
	}

	public void setVl_peso_bruto(BigDecimal vl_peso_bruto) {
		this.vl_peso_bruto = vl_peso_bruto;
	}

	public BigDecimal getVl_peso_liquido() {
		return vl_peso_liquido;
	}

	public void setVl_peso_liquido(BigDecimal vl_peso_liquido) {
		this.vl_peso_liquido = vl_peso_liquido;
	}

	public BigDecimal getVl_quantidades() {
		return vl_quantidades;
	}

	public void setVl_quantidades(BigDecimal vl_quantidades) {
		this.vl_quantidades = vl_quantidades;
	}

	public BigDecimal getVl_descontos() {
		return vl_descontos;
	}

	public void setVl_descontos(BigDecimal vl_descontos) {
		this.vl_descontos = vl_descontos;
	}

	public PlanoVisitas getTx_plano_visitas() {
		return tx_plano_visitas;
	}

	public void setTx_plano_visitas(PlanoVisitas tx_plano_visitas) {
		this.tx_plano_visitas = tx_plano_visitas;
	}

	public Medidor getTx_medidor() {
		return tx_medidor;
	}

	public void setTx_medidor(Medidor tx_medidor) {
		this.tx_medidor = tx_medidor;
	}

	public ForeignCollection<NotaItem> getNotaItems() {
		return notaItems;
	}

	public void setNotaItems(ForeignCollection<NotaItem> notaItems) {
		this.notaItems = notaItems;
	}

	public List<NotaItem> getNotaItemsTemp() {
		return notaItemsTemp;
	}

	public void setNotaItemsTemp(List<NotaItem> notaItemsTemp) {
		this.notaItemsTemp = notaItemsTemp;
	}

	public NotaOcorrencia getNotaOcorrencia() {
		return notaOcorrencia;
	}

	public void setNotaOcorrencia(NotaOcorrencia notaOcorrencia) {
		this.notaOcorrencia = notaOcorrencia;
	}
}